package com.silence.springboot.service;


import com.mybatisflex.core.paginate.Page;
import com.mybatisflex.core.service.IService;
import com.silence.springboot.entity.BookBaseEntity;
import com.silence.springboot.vo.input.*;
import com.silence.springboot.vo.output.PageBookBaseInfoOutput;
import com.silence.springboot.vo.output.PageBookStatusAdminOutput;
import com.silence.springboot.vo.output.PageBookStatusOutput;
import com.silence.springboot.vo.output.SelectAllOutput;

import java.util.List;

/**
 * 图书信息表 服务层。
 *
 * @author mybatis-flex-helper automatic generation
 * @since 1.0
 */
public interface BookBaseService extends IService<BookBaseEntity> {

    /**
     * 新建入库
     *
     * @param input 图书信息表实体类
     */
    void insertBook(InsertBookInput input);

    /**
     * 查询信息
     *
     * @param input 图书信息表实体类
     */
    BookBaseEntity selectBook(SelectBookInput input);

    /**
     * 更新信息
     *
     * @param input 图书信息表实体类
     */
    void updateBook(UpdateBookInput input);

    /**
     * 分页查询图书信息
     *
     * @param input 入参
     * @return 分页结果
     */
    Page<PageBookBaseInfoOutput> pageBookBaseInfo(PageBookBaseInfoInput input);

    /**
     * 删除图书信息
     *
     * @param id 主键
     */
    void deleteBook(String id);

    /**
     * 查询所有图书信息
     *
     * @return 所有图书信息
     */
    List<SelectAllOutput> selectAll();

    /**
     * 借书
     *
     * @param input 入参
     */
    void borrowBook(BorrowBookInput input);

    /**
     * 还书
     *
     * @param input 入参
     */
    void returnBook(ReturnBookInput input);

    /**
     * 分页查询图书状态
     *
     * @param input 入参
     * @return 分页结果
     */
    Page<PageBookStatusOutput> pageBookStatus(PageBookStatusInput input);

    /**
     * 分页查询图书状态
     *
     * @param input 入参
     * @return 分页结果
     */
    Page<PageBookStatusAdminOutput> pageBookStatusAdmin(PageBookStatusAdminInput input);

    /**
     * 管理员同意借书或还书
     *
     * @param input 入参
     */
    void adminAgreeBorrowOrReturn(AdminAgreeBorrowOrReturnInput input);

    /**
     * 管理员拒绝借书或还书
     *
     * @param input 入参
     */
    void adminRefuseBorrowOrReturn(AdminRefuseBorrowOrReturnInput input);
}